home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-03 / imb9011.zip / CHKSUM.BAS < prev    next >
BASIC Source File  |  1990-11-01  |  2KB  |  56 lines

  1. ' Program--CHKSUM.BAS
  2. ' Demonstrates how to check if a credit card number is valid.
  3.  
  4. DEFINT A-Z
  5. DECLARE FUNCTION ValidCard% (CreditCard$)
  6.  
  7. GetNumber:
  8.   INPUT "Enter card number (Press <enter> to exit) ", A$
  9.   IF LEN(A$) = 0 THEN END
  10.   IF ValidCard%(A$) THEN
  11.      PRINT "This is a valid card number"
  12.   ELSE
  13.      PRINT "Not a valid card number"
  14.   END IF
  15.   GOTO GetNumber
  16.  
  17. FUNCTION ValidCard% (CreditCard$)
  18. ' Input is a credit card number in the form of a string.
  19. ' Output is 0 if not valid, or -1 if valid.
  20.   ValidCard% = 0                 ' Assume it is not a valid card.
  21.   A$ = LTRIM$(RTRIM$(CreditCard$))  ' Remove lead/trail blanks.
  22.   Sp$ = " "
  23.  
  24. StripSpace:                         ' Remove other blanks.
  25.   A = INSTR(A$, Sp$)
  26.   IF A THEN                         ' Move it over.
  27.      A$ = LEFT$(A$, A - 1) + MID$(A$, A + 1)    
  28.      GOTO StripSpace
  29.   END IF
  30.   CheckSum = 0                      ' Start with 0 for check sum.
  31.   Multiplier = 2
  32.   ' Process from right to left.
  33.   FOR I = LEN(A$) - 1 TO 1 STEP -1  ' All digits except last one.
  34.     A = ASC(MID$(A$, I, 1)) - 48    ' Get a single digit.
  35.     IF A < 0 OR A > 9 THEN          ' If not 0-9,
  36.        EXIT FUNCTION                '   then get out.
  37.     END IF
  38.     A = A * Multiplier
  39.     Multiplier = 3 - Multiplier     ' Toggle multiplier
  40.     IF A > 9 THEN
  41.        Temp$ = LTRIM$(STR$(A))      ' Add numbers together.
  42.        A = 0
  43.        FOR J = 1 TO LEN(Temp$)
  44.          A = A + ASC(MID$(Temp$, J, 1)) - 48' Faster than VAL.
  45.        NEXT
  46.     END IF
  47.     CheckSum = CheckSum + A
  48.   NEXT
  49.   ' Now we subtract the checksum
  50.   ' from the next higher multiple of 10.
  51.   CheckSum = ((CheckSum + 9) \ 10) * 10 - CheckSum
  52.   IF VAL(RIGHT$(A$, 1)) = CheckSum THEN
  53.      ValidCard% = -1
  54.   END IF
  55. END FUNCTION
  56.